package com.lwei.tallybook.client.config;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.lwei.tallybook.service.support.SQLFormatterUtil;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

/**
 * 自定义sql性能分析插件输出格式
 * @author sks.lwei
 */
public class P6SpyLogger implements MessageFormattingStrategy {

    /**
     * 重写输出方法
     * @param connectionId 连接id
     * @param now 当前时间
     * @param elapsed 执行时长，包括执行 SQL 和处理结果集的时间(可以参考来调优)
     * @param category 语句分类，statement、resultset 等
     * @param prepared 查询语句。可能是 prepared statement，表现为 select * from table1 where c1=?，问号参数形式
     * @param sql 含参数值的查询语句，如 select * from from table1 where c1=7
     */
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category,
                                String prepared, String sql, String url) {
        StringBuilder builder = new StringBuilder("");

        if(StringUtils.isNotEmpty(sql)){
            builder.append(now).append("\n")
                    .append("Consume Time：").append(elapsed).append(" ms").append("\n")
                    .append("Category: ").append(category).append("\n")
//                    .append("URL: ").append("[").append(connectionId).append("]").append(url).append("\n")
                    .append("SQL statement: ").append(prepared).append("\n")
                    .append("SQL Execute:\n").append(SQLFormatterUtil.format(sql.replaceAll("[\\s]+", " ") + "\n"));
        }
        return builder.toString();
    }
}
